package com.nacos.utils;

import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingFactory;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.listener.Event;
import com.alibaba.nacos.api.naming.listener.EventListener;
import com.alibaba.nacos.api.naming.listener.NamingEvent;
import com.alibaba.nacos.api.naming.pojo.Instance;

public class NacosServiceRegister {

    public static void main(String[] args) throws NacosException {
        String serverAddr = "localhost:8848"; // Nacos服务地址
        String serviceName = "your-service-name"; // 服务名

        // 创建NamingService实例
        NamingService naming = NamingFactory.createNamingService(serverAddr);
        // 创建Instance对象，设置实例信息
        Instance instance = new Instance();
        instance.setIp("127.0.0.1");
        instance.setPort(8080);
        instance.setWeight(1.0);
        naming.registerInstance(serviceName, instance);
        // 还可以设置其他属性，如instanceId, metadata等

        // 注册服务实例
        naming.registerInstance("your-service-name1", "11.11.11.11", 8888, "TEST1");
        naming.registerInstance("your-service-name2", "2.2.2.2", 9999, "DEFAULT");
        naming.deregisterInstance("your-service-name2", "2.2.2.2", 9999, "DEFAULT");

        naming.subscribe("your-service-name1", new EventListener() {
            @Override
            public void onEvent(Event event) {
                System.out.println(((NamingEvent) event).getServiceName());
                System.out.println(((NamingEvent) event).getInstances());
            }
        });

        // 注意：通常在实际应用中，服务注册是在服务启动时完成的，不需要手动注销
        // 但在某些情况下，你可能需要手动注销服务实例
        // naming.deregisterInstance(serviceName, ip, port);


        // 保持主线程运行，以便监听器可以继续工作
        // 在实际的应用中，你可能不需要这样做，因为监听器会在Spring容器中自动管理
        try {
            Thread.sleep(Long.MAX_VALUE);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}